
GLOBAL
	//variables de animacion


	// vamo a ver si sale la maquina de estados
	string estado;
	string direccion;
	string direccion_last;
	
	//variables physics
	_vector3D speed = 0,0,0;
	int speedAbs;
	

	floor = 340;
	minLand = 340;

END



PROCESS jugador()
PRIVATE
	_vector3D currentDirection = 0, 0, 0;
	currentState = IDLE;
	doLoop;
END
//
//	Controla el jugador y los movimientos 
//
BEGIN

	//write ( 0, 0, 90, 0, "Jugador: ");
	//write_var ( 0, 0, 100, 0, estado);
	//write_var ( 0, 0, 110, 0, direccion);
	
	
	// asigna el grafico numero 10 del FPG al proceso
	file = getAssetID("player");
	graph = 10;
	
	// lo posiciono a lo negro en la pantalla
	
	write_var(0,300,330,3, graph);	

	x = 200;
	y = 400;
	
	write_var(0,0,160,0,X);
	write_var(0,0,180,0,Y);
	write_var(0,0,200,0,speed.varX);
	write_var(0,0,210,0,speed.varY);
	write_var(0,0,230,0,currentDirection.varX);
	write_var(0,0,240,0,currentDirection.varY);
	LOOP
		//escuaha teclado y cambia el currentState
		currentState = inputController(&currentDirection, currentState); //manda direction como puntero
		
		setState(currentState, &current_state_frames, &doLoop);
		
		
		//obtiene flag
		IF ( getFlags(currentDirection ) != 1000)
			flags = getFlags(currentDirection );
		END
		
		//obtiene la velocidad absoluta segun el estado
		speedAbs = updateSpeed(currentState) ;
		//multiplica cada componente de la velocidad vectorial por la absoluta
		speed.varX = (speedAbs * currentDirection.varX);
		speed.varZ = (speedAbs * currentDirection.varZ);
		speed.varY = (speedAbs * currentDirection.varY);	
		
		//si no esta en el suelo aplico gravedad
		IF (NOT landed)
			speed.varY = applyGravity(speed.varY);	
		END
		
		//actualizo posicion usando la velocidad
		x += speed.varX;
		IF( y + speed.varZ  >= minLand)
			y += speed.varZ;
			IF(landed)
				floor = y;
			END
		END
		y += speed.varY;
		
		//chequea si sigue en el suelo
		IF( y >= floor)
			landed = True;
			IF ( landedTime <=JUMP_DELAY)
					landedTime ++;
			END
		ELSE
			landed = False;
			landedTime = 1;
		END
		
		//actualizo el grafico segun el estado
		graph = updateAnimation(currentState, current_state_frames, doLoop);
		

		
		
	
		frame;
		
	END // loop

END	// begin 

